/**
 * 该项目的路由跳转工具函数
 *
 * @author 济南晨霜信息技术有限公司
 * @mobile 18560000860 / 18754137913
 *
 * ========================================================================================================================
 * = routeToLoginAndConfigAfterPagePath : 跳转到登录页并且配置登录成功后要跳转的目标页面
 * = routeToConfiguredLoginAfterPage    : 跳转到配置的登录成功后的目标页面
 * = getLoginPagePath                   : 获取在 pages.json 中配置的登录页路径
 * = getHomePagePath                    : 获取在 pages.json 中配置的主页路径
 * = routeToHomePage                 : 获取登录成功后的目标页面路径（带参数的全路径）数据
 * ========================================================================================================================
 */
import { uniIsTabBar, uniGetPagesData, urlAppendParams } from "@/uni_modules/hi-ui/functions";

/**
 * 跳转到登录页并且配置登录成功后要跳转的目标页面
 * @param {String} afterPagePath 登录成功后的目标页面路径（带参数的全路径）
 * @param {String} loginPagePath 登录页路径，如果为空，则默认使用 pages.json 配置的登录页
 */
export function routeToLoginAndConfigAfterPagePath(afterPagePath, loginPagePath) {
    // 如果参数为空，则默认把当前页面的全路径作为登录成功后的目标页面路径，这样登录后可以刷新当前页面
    if (!afterPagePath) {
        const pages = getCurrentPages();
        const page = pages[pages.length - 1];
        afterPagePath = page?.$page?.fullPath;
    }

    // 存储到本地，这样刷新后也有效
    uni.setStorageSync("LOGIN_AFTER_PAGE_PATH", afterPagePath);

    // 登录页路径，如果为空，则默认使用 pages.json 配置的登录页
    if (!loginPagePath) loginPagePath = getLoginPagePath();

    // 跳转到登录页
    uni.$hiRouter.redirect(loginPagePath);
}

/**
 * 跳转到配置的登录成功后的目标页面
 */
export function routeToConfiguredLoginAfterPage() {
    // 在 pages.json 中配置的主页路径
    const homePagePath = getHomePagePath() || "/pages/home/index";

    // 目标页面路径
    const loginAfterPage = uni.getStorageSync("LOGIN_TARGET_PATH") || homePagePath;

    // 是 tabBar 页面
    if (uniIsTabBar(loginAfterPage)) {
        uni.$hiRouter.tab({
            url: loginAfterPage,
            success: () => {
                // 跳转成功后清除对应缓存数据
                uni.removeStorageSync("LOGIN_AFTER_PAGE_PATH");
            }
        });
    }

    // 不是 tabBar 页面
    else {
        uni.$hiRouter.redirect({
            url: loginAfterPage,
            success: () => {
                // 跳转成功后清除对应缓存数据
                uni.removeStorageSync("LOGIN_AFTER_PAGE_PATH");
            }
        });
    }
}

/**
 * 获取在 pages.json 中配置的登录页路径
 */
export function getLoginPagePath() {
    return uniGetPagesData().find((item) => item?.isLogin)?.fullPath;
}

/**
 * 获取在 pages.json 中配置的主页路径
 */
export function getHomePagePath() {
    return uniGetPagesData().find((item) => item?.isHome)?.fullPath;
}

/**
 * 跳转到主页
 * @param {Object} params 跳转时的参数
 */
export function routeToHomePage(params = {}) {
    // 在 pages.json 中配置的主页路径
    const homePagePath = getHomePagePath() || "/pages/home/index";

    // 是 tabBar 页面
    if (uniIsTabBar(homePagePath)) {
        uni.$hiRouter.tab(urlAppendParams(homePagePath, params));
        return;
    }

    // 不是 tabBar 页面
    uni.$hiRouter.launch(urlAppendParams(homePagePath, params));
}
